#include "Task.hpp"       //把他放在前面，因为threadPool要用
#include "threadPool.hpp"
#include "thread.hpp"
#include <ctime>
#include <unistd.h>


#include<typeinfo>   //查看类型的头文件
int main()
{
    srand((unsigned long)time(nullptr) ^ getpid()); // 增加种子随机性

    // fun_t a;
    // std::cout<<typeid(a).name()<<std::endl;   检查typedef重定义来着

    // 如果单例本身也在被多线程申请使用呢？ 那么单例构造需要加锁！
    ThreadPool<Task>::getThreadPool()->run();
    while (true)
    {
        // 生产过程中，制作任务要花费时间
        int x = rand() % 100 + 1;
        usleep(5210); // 模拟花费的时间
        int y = rand() % 30 + 1;
        Task t(x, y, [](int x, int y)->int{
            return x+y;
        });

        logMessage(DEBUG, "制作完成: %d+%d = ?",x,y);
        logMessage(DEBUG, "制作完成: %d+%d = ?",x,y);
        logMessage(DEBUG, "制作完成: %d+%d = ?",x,y);
        logMessage(DEBUG, "制作完成: %d+%d = ?",x,y);

        //推送任务到线程池中
        ThreadPool<Task>::getThreadPool()->pushTask(t);

        sleep(1);
    }
    return 0;
}